/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package OntoUML.provider;

import OntoUML.util.OntoUMLAdapterFactory;

import java.util.ArrayList;
import java.util.Collection;

import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;

import org.eclipse.emf.edit.provider.ChangeNotifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
import org.eclipse.emf.edit.provider.IDisposable;
import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertySource;
import org.eclipse.emf.edit.provider.INotifyChangedListener;
import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;

/**
 * This is the factory that is used to provide the interfaces needed to support Viewers.
 * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}.
 * The adapters also support Eclipse property sheets.
 * Note that most of the adapters are shared among multiple instances.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated
 */
public class OntoUMLItemProviderAdapterFactory extends OntoUMLAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
	/**
	 * This keeps track of the root adapter factory that delegates to this adapter factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ComposedAdapterFactory parentAdapterFactory;

	/**
	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IChangeNotifier changeNotifier = new ChangeNotifier();

	/**
	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected Collection<Object> supportedTypes = new ArrayList<Object>();

	/**
	 * This constructs an instance.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public OntoUMLItemProviderAdapterFactory() {
		supportedTypes.add(IEditingDomainItemProvider.class);
		supportedTypes.add(IStructuredItemContentProvider.class);
		supportedTypes.add(ITreeItemContentProvider.class);
		supportedTypes.add(IItemLabelProvider.class);
		supportedTypes.add(IItemPropertySource.class);
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.AntiRigidMixinClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AntiRigidMixinClassItemProvider antiRigidMixinClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.AntiRigidMixinClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAntiRigidMixinClassAdapter() {
		if (antiRigidMixinClassItemProvider == null) {
			antiRigidMixinClassItemProvider = new AntiRigidMixinClassItemProvider(this);
		}

		return antiRigidMixinClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.AntiRigidSortalClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AntiRigidSortalClassItemProvider antiRigidSortalClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.AntiRigidSortalClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAntiRigidSortalClassAdapter() {
		if (antiRigidSortalClassItemProvider == null) {
			antiRigidSortalClassItemProvider = new AntiRigidSortalClassItemProvider(this);
		}

		return antiRigidSortalClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Association} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected AssociationItemProvider associationItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Association}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createAssociationAdapter() {
		if (associationItemProvider == null) {
			associationItemProvider = new AssociationItemProvider(this);
		}

		return associationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Category} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected CategoryItemProvider categoryItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Category}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createCategoryAdapter() {
		if (categoryItemProvider == null) {
			categoryItemProvider = new CategoryItemProvider(this);
		}

		return categoryItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Characterization} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected CharacterizationItemProvider characterizationItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Characterization}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createCharacterizationAdapter() {
		if (characterizationItemProvider == null) {
			characterizationItemProvider = new CharacterizationItemProvider(this);
		}

		return characterizationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Class} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ClassItemProvider classItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Class}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createClassAdapter() {
		if (classItemProvider == null) {
			classItemProvider = new ClassItemProvider(this);
		}

		return classItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Classifier} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ClassifierItemProvider classifierItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Classifier}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createClassifierAdapter() {
		if (classifierItemProvider == null) {
			classifierItemProvider = new ClassifierItemProvider(this);
		}

		return classifierItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Collective} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected CollectiveItemProvider collectiveItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Collective}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createCollectiveAdapter() {
		if (collectiveItemProvider == null) {
			collectiveItemProvider = new CollectiveItemProvider(this);
		}

		return collectiveItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.componentOf} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected componentOfItemProvider componentOfItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.componentOf}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createcomponentOfAdapter() {
		if (componentOfItemProvider == null) {
			componentOfItemProvider = new componentOfItemProvider(this);
		}

		return componentOfItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Container} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ContainerItemProvider containerItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Container}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createContainerAdapter() {
		if (containerItemProvider == null) {
			containerItemProvider = new ContainerItemProvider(this);
		}

		return containerItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Datatype} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DatatypeItemProvider datatypeItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Datatype}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDatatypeAdapter() {
		if (datatypeItemProvider == null) {
			datatypeItemProvider = new DatatypeItemProvider(this);
		}

		return datatypeItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.DatatypeRelationship} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DatatypeRelationshipItemProvider datatypeRelationshipItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.DatatypeRelationship}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDatatypeRelationshipAdapter() {
		if (datatypeRelationshipItemProvider == null) {
			datatypeRelationshipItemProvider = new DatatypeRelationshipItemProvider(this);
		}

		return datatypeRelationshipItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.DependencyRelationship} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DependencyRelationshipItemProvider dependencyRelationshipItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.DependencyRelationship}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDependencyRelationshipAdapter() {
		if (dependencyRelationshipItemProvider == null) {
			dependencyRelationshipItemProvider = new DependencyRelationshipItemProvider(this);
		}

		return dependencyRelationshipItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Derivation} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DerivationItemProvider derivationItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Derivation}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDerivationAdapter() {
		if (derivationItemProvider == null) {
			derivationItemProvider = new DerivationItemProvider(this);
		}

		return derivationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.DirectedBinaryRelationship} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DirectedBinaryRelationshipItemProvider directedBinaryRelationshipItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.DirectedBinaryRelationship}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDirectedBinaryRelationshipAdapter() {
		if (directedBinaryRelationshipItemProvider == null) {
			directedBinaryRelationshipItemProvider = new DirectedBinaryRelationshipItemProvider(this);
		}

		return directedBinaryRelationshipItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.DirectedRelationship} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected DirectedRelationshipItemProvider directedRelationshipItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.DirectedRelationship}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createDirectedRelationshipAdapter() {
		if (directedRelationshipItemProvider == null) {
			directedRelationshipItemProvider = new DirectedRelationshipItemProvider(this);
		}

		return directedRelationshipItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Element} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ElementItemProvider elementItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Element}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createElementAdapter() {
		if (elementItemProvider == null) {
			elementItemProvider = new ElementItemProvider(this);
		}

		return elementItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Feature} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected FeatureItemProvider featureItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Feature}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createFeatureAdapter() {
		if (featureItemProvider == null) {
			featureItemProvider = new FeatureItemProvider(this);
		}

		return featureItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.FormalAssociation} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected FormalAssociationItemProvider formalAssociationItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.FormalAssociation}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createFormalAssociationAdapter() {
		if (formalAssociationItemProvider == null) {
			formalAssociationItemProvider = new FormalAssociationItemProvider(this);
		}

		return formalAssociationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Generalization} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GeneralizationItemProvider generalizationItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Generalization}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createGeneralizationAdapter() {
		if (generalizationItemProvider == null) {
			generalizationItemProvider = new GeneralizationItemProvider(this);
		}

		return generalizationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.GeneralizationSet} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected GeneralizationSetItemProvider generalizationSetItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.GeneralizationSet}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createGeneralizationSetAdapter() {
		if (generalizationSetItemProvider == null) {
			generalizationSetItemProvider = new GeneralizationSetItemProvider(this);
		}

		return generalizationSetItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Kind} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected KindItemProvider kindItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Kind}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createKindAdapter() {
		if (kindItemProvider == null) {
			kindItemProvider = new KindItemProvider(this);
		}

		return kindItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.MaterialAssociation} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MaterialAssociationItemProvider materialAssociationItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.MaterialAssociation}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMaterialAssociationAdapter() {
		if (materialAssociationItemProvider == null) {
			materialAssociationItemProvider = new MaterialAssociationItemProvider(this);
		}

		return materialAssociationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Mediation} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MediationItemProvider mediationItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Mediation}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMediationAdapter() {
		if (mediationItemProvider == null) {
			mediationItemProvider = new MediationItemProvider(this);
		}

		return mediationItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.memberOf} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected memberOfItemProvider memberOfItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.memberOf}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter creatememberOfAdapter() {
		if (memberOfItemProvider == null) {
			memberOfItemProvider = new memberOfItemProvider(this);
		}

		return memberOfItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Meronymic} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MeronymicItemProvider meronymicItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Meronymic}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMeronymicAdapter() {
		if (meronymicItemProvider == null) {
			meronymicItemProvider = new MeronymicItemProvider(this);
		}

		return meronymicItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Mixin} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MixinItemProvider mixinItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Mixin}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMixinAdapter() {
		if (mixinItemProvider == null) {
			mixinItemProvider = new MixinItemProvider(this);
		}

		return mixinItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.MixinClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MixinClassItemProvider mixinClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.MixinClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMixinClassAdapter() {
		if (mixinClassItemProvider == null) {
			mixinClassItemProvider = new MixinClassItemProvider(this);
		}

		return mixinClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Mode} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ModeItemProvider modeItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Mode}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createModeAdapter() {
		if (modeItemProvider == null) {
			modeItemProvider = new ModeItemProvider(this);
		}

		return modeItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.MomentClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MomentClassItemProvider momentClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.MomentClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMomentClassAdapter() {
		if (momentClassItemProvider == null) {
			momentClassItemProvider = new MomentClassItemProvider(this);
		}

		return momentClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.MultiplicityElement} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected MultiplicityElementItemProvider multiplicityElementItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.MultiplicityElement}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createMultiplicityElementAdapter() {
		if (multiplicityElementItemProvider == null) {
			multiplicityElementItemProvider = new MultiplicityElementItemProvider(this);
		}

		return multiplicityElementItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.NonRigidMixinClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected NonRigidMixinClassItemProvider nonRigidMixinClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.NonRigidMixinClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createNonRigidMixinClassAdapter() {
		if (nonRigidMixinClassItemProvider == null) {
			nonRigidMixinClassItemProvider = new NonRigidMixinClassItemProvider(this);
		}

		return nonRigidMixinClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.ObjectClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ObjectClassItemProvider objectClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.ObjectClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createObjectClassAdapter() {
		if (objectClassItemProvider == null) {
			objectClassItemProvider = new ObjectClassItemProvider(this);
		}

		return objectClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Phase} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PhaseItemProvider phaseItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Phase}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPhaseAdapter() {
		if (phaseItemProvider == null) {
			phaseItemProvider = new PhaseItemProvider(this);
		}

		return phaseItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Property} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected PropertyItemProvider propertyItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Property}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createPropertyAdapter() {
		if (propertyItemProvider == null) {
			propertyItemProvider = new PropertyItemProvider(this);
		}

		return propertyItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Quantity} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected QuantityItemProvider quantityItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Quantity}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createQuantityAdapter() {
		if (quantityItemProvider == null) {
			quantityItemProvider = new QuantityItemProvider(this);
		}

		return quantityItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.RedefinableElement} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RedefinableElementItemProvider redefinableElementItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.RedefinableElement}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRedefinableElementAdapter() {
		if (redefinableElementItemProvider == null) {
			redefinableElementItemProvider = new RedefinableElementItemProvider(this);
		}

		return redefinableElementItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.RelationalClassifier} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RelationalClassifierItemProvider relationalClassifierItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.RelationalClassifier}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRelationalClassifierAdapter() {
		if (relationalClassifierItemProvider == null) {
			relationalClassifierItemProvider = new RelationalClassifierItemProvider(this);
		}

		return relationalClassifierItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Relationship} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RelationshipItemProvider relationshipItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Relationship}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRelationshipAdapter() {
		if (relationshipItemProvider == null) {
			relationshipItemProvider = new RelationshipItemProvider(this);
		}

		return relationshipItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Relator} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RelatorItemProvider relatorItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Relator}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRelatorAdapter() {
		if (relatorItemProvider == null) {
			relatorItemProvider = new RelatorItemProvider(this);
		}

		return relatorItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.RigidMixinClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RigidMixinClassItemProvider rigidMixinClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.RigidMixinClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRigidMixinClassAdapter() {
		if (rigidMixinClassItemProvider == null) {
			rigidMixinClassItemProvider = new RigidMixinClassItemProvider(this);
		}

		return rigidMixinClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.RigidSortalClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RigidSortalClassItemProvider rigidSortalClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.RigidSortalClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRigidSortalClassAdapter() {
		if (rigidSortalClassItemProvider == null) {
			rigidSortalClassItemProvider = new RigidSortalClassItemProvider(this);
		}

		return rigidSortalClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Role} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RoleItemProvider roleItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Role}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRoleAdapter() {
		if (roleItemProvider == null) {
			roleItemProvider = new RoleItemProvider(this);
		}

		return roleItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.RoleMixin} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected RoleMixinItemProvider roleMixinItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.RoleMixin}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createRoleMixinAdapter() {
		if (roleMixinItemProvider == null) {
			roleMixinItemProvider = new RoleMixinItemProvider(this);
		}

		return roleMixinItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.SemiRigidMixin} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SemiRigidMixinItemProvider semiRigidMixinItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.SemiRigidMixin}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSemiRigidMixinAdapter() {
		if (semiRigidMixinItemProvider == null) {
			semiRigidMixinItemProvider = new SemiRigidMixinItemProvider(this);
		}

		return semiRigidMixinItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.SimpleDatatype} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SimpleDatatypeItemProvider simpleDatatypeItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.SimpleDatatype}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSimpleDatatypeAdapter() {
		if (simpleDatatypeItemProvider == null) {
			simpleDatatypeItemProvider = new SimpleDatatypeItemProvider(this);
		}

		return simpleDatatypeItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.SortalClass} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SortalClassItemProvider sortalClassItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.SortalClass}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSortalClassAdapter() {
		if (sortalClassItemProvider == null) {
			sortalClassItemProvider = new SortalClassItemProvider(this);
		}

		return sortalClassItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.StructuralDatatype} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected StructuralDatatypeItemProvider structuralDatatypeItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.StructuralDatatype}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createStructuralDatatypeAdapter() {
		if (structuralDatatypeItemProvider == null) {
			structuralDatatypeItemProvider = new StructuralDatatypeItemProvider(this);
		}

		return structuralDatatypeItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.StructuralFeature} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected StructuralFeatureItemProvider structuralFeatureItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.StructuralFeature}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createStructuralFeatureAdapter() {
		if (structuralFeatureItemProvider == null) {
			structuralFeatureItemProvider = new StructuralFeatureItemProvider(this);
		}

		return structuralFeatureItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.subCollectionOf} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected subCollectionOfItemProvider subCollectionOfItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.subCollectionOf}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createsubCollectionOfAdapter() {
		if (subCollectionOfItemProvider == null) {
			subCollectionOfItemProvider = new subCollectionOfItemProvider(this);
		}

		return subCollectionOfItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.SubKind} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SubKindItemProvider subKindItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.SubKind}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSubKindAdapter() {
		if (subKindItemProvider == null) {
			subKindItemProvider = new SubKindItemProvider(this);
		}

		return subKindItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.subQuantityOf} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected subQuantityOfItemProvider subQuantityOfItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.subQuantityOf}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createsubQuantityOfAdapter() {
		if (subQuantityOfItemProvider == null) {
			subQuantityOfItemProvider = new subQuantityOfItemProvider(this);
		}

		return subQuantityOfItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.SubstanceSortal} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected SubstanceSortalItemProvider substanceSortalItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.SubstanceSortal}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createSubstanceSortalAdapter() {
		if (substanceSortalItemProvider == null) {
			substanceSortalItemProvider = new SubstanceSortalItemProvider(this);
		}

		return substanceSortalItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.Type} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TypeItemProvider typeItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.Type}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTypeAdapter() {
		if (typeItemProvider == null) {
			typeItemProvider = new TypeItemProvider(this);
		}

		return typeItemProvider;
	}

	/**
	 * This keeps track of the one adapter used for all {@link OntoUML.TypedElement} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TypedElementItemProvider typedElementItemProvider;

	/**
	 * This creates an adapter for a {@link OntoUML.TypedElement}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createTypedElementAdapter() {
		if (typedElementItemProvider == null) {
			typedElementItemProvider = new TypedElementItemProvider(this);
		}

		return typedElementItemProvider;
	}

	/**
	 * This returns the root adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ComposeableAdapterFactory getRootAdapterFactory() {
		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
	}

	/**
	 * This sets the composed adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
		this.parentAdapterFactory = parentAdapterFactory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean isFactoryForType(Object type) {
		return supportedTypes.contains(type) || super.isFactoryForType(type);
	}

	/**
	 * This implementation substitutes the factory itself as the key for the adapter.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter adapt(Notifier notifier, Object type) {
		return super.adapt(notifier, this);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object adapt(Object object, Object type) {
		if (isFactoryForType(type)) {
			Object adapter = super.adapt(object, type);
			if (!(type instanceof Class) || (((Class<?>)type).isInstance(adapter))) {
				return adapter;
			}
		}

		return null;
	}

	/**
	 * This adds a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void addListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.addListener(notifyChangedListener);
	}

	/**
	 * This removes a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void removeListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.removeListener(notifyChangedListener);
	}

	/**
	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void fireNotifyChanged(Notification notification) {
		changeNotifier.fireNotifyChanged(notification);

		if (parentAdapterFactory != null) {
			parentAdapterFactory.fireNotifyChanged(notification);
		}
	}

	/**
	 * This disposes all of the item providers created by this factory. 
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void dispose() {
		if (antiRigidMixinClassItemProvider != null) antiRigidMixinClassItemProvider.dispose();
		if (antiRigidSortalClassItemProvider != null) antiRigidSortalClassItemProvider.dispose();
		if (associationItemProvider != null) associationItemProvider.dispose();
		if (categoryItemProvider != null) categoryItemProvider.dispose();
		if (characterizationItemProvider != null) characterizationItemProvider.dispose();
		if (classItemProvider != null) classItemProvider.dispose();
		if (classifierItemProvider != null) classifierItemProvider.dispose();
		if (collectiveItemProvider != null) collectiveItemProvider.dispose();
		if (componentOfItemProvider != null) componentOfItemProvider.dispose();
		if (containerItemProvider != null) containerItemProvider.dispose();
		if (datatypeItemProvider != null) datatypeItemProvider.dispose();
		if (datatypeRelationshipItemProvider != null) datatypeRelationshipItemProvider.dispose();
		if (dependencyRelationshipItemProvider != null) dependencyRelationshipItemProvider.dispose();
		if (derivationItemProvider != null) derivationItemProvider.dispose();
		if (directedBinaryRelationshipItemProvider != null) directedBinaryRelationshipItemProvider.dispose();
		if (directedRelationshipItemProvider != null) directedRelationshipItemProvider.dispose();
		if (elementItemProvider != null) elementItemProvider.dispose();
		if (featureItemProvider != null) featureItemProvider.dispose();
		if (formalAssociationItemProvider != null) formalAssociationItemProvider.dispose();
		if (generalizationItemProvider != null) generalizationItemProvider.dispose();
		if (generalizationSetItemProvider != null) generalizationSetItemProvider.dispose();
		if (kindItemProvider != null) kindItemProvider.dispose();
		if (materialAssociationItemProvider != null) materialAssociationItemProvider.dispose();
		if (mediationItemProvider != null) mediationItemProvider.dispose();
		if (memberOfItemProvider != null) memberOfItemProvider.dispose();
		if (meronymicItemProvider != null) meronymicItemProvider.dispose();
		if (mixinItemProvider != null) mixinItemProvider.dispose();
		if (mixinClassItemProvider != null) mixinClassItemProvider.dispose();
		if (modeItemProvider != null) modeItemProvider.dispose();
		if (momentClassItemProvider != null) momentClassItemProvider.dispose();
		if (multiplicityElementItemProvider != null) multiplicityElementItemProvider.dispose();
		if (nonRigidMixinClassItemProvider != null) nonRigidMixinClassItemProvider.dispose();
		if (objectClassItemProvider != null) objectClassItemProvider.dispose();
		if (phaseItemProvider != null) phaseItemProvider.dispose();
		if (propertyItemProvider != null) propertyItemProvider.dispose();
		if (quantityItemProvider != null) quantityItemProvider.dispose();
		if (redefinableElementItemProvider != null) redefinableElementItemProvider.dispose();
		if (relationalClassifierItemProvider != null) relationalClassifierItemProvider.dispose();
		if (relationshipItemProvider != null) relationshipItemProvider.dispose();
		if (relatorItemProvider != null) relatorItemProvider.dispose();
		if (rigidMixinClassItemProvider != null) rigidMixinClassItemProvider.dispose();
		if (rigidSortalClassItemProvider != null) rigidSortalClassItemProvider.dispose();
		if (roleItemProvider != null) roleItemProvider.dispose();
		if (roleMixinItemProvider != null) roleMixinItemProvider.dispose();
		if (semiRigidMixinItemProvider != null) semiRigidMixinItemProvider.dispose();
		if (simpleDatatypeItemProvider != null) simpleDatatypeItemProvider.dispose();
		if (sortalClassItemProvider != null) sortalClassItemProvider.dispose();
		if (structuralDatatypeItemProvider != null) structuralDatatypeItemProvider.dispose();
		if (structuralFeatureItemProvider != null) structuralFeatureItemProvider.dispose();
		if (subCollectionOfItemProvider != null) subCollectionOfItemProvider.dispose();
		if (subKindItemProvider != null) subKindItemProvider.dispose();
		if (subQuantityOfItemProvider != null) subQuantityOfItemProvider.dispose();
		if (substanceSortalItemProvider != null) substanceSortalItemProvider.dispose();
		if (typeItemProvider != null) typeItemProvider.dispose();
		if (typedElementItemProvider != null) typedElementItemProvider.dispose();
	}

}
